The use of software patterns (“patterns”) may improve the software development process. A pattern may be a proven, best practice solution to a known problem within a given context. For example, a pattern may be a general, reusable, customizable design solution to a software design problem that may take the form of a description, template, model, code sample, or other mechanism that facilitates a design solution. Different types of patterns exist. For example, an idiom pattern may include sections of software code, a design pattern may include various software classes, and an architectural pattern may provide an architectural level solution. Some patterns are well known in the art; for example, the Model-View-Controller pattern is a well known architectural pattern. In many cases, a pattern can describe relationships and interactions between classes and/or objects without specifying a final solution. Indeed, a pattern, when instantiated, may benefit a code developer by facilitating a design solution, but the pattern may also lend itself to customization so that the code developer can tailor the pattern to his or her specific application.
The application of patterns within a software project has been, primarily, a manual process. Patterns may be distributed to team members who are interested in using the pattern. The impetus to evaluate and/or apply the pattern then falls on the team and/or team members. Some patterns may be more useful than others within a particular context, and the manual evaluation of patterns can be burdensome on individuals or teams that may wish to implement a pattern.
As with any asset, the maintenance, documentation, creation, and management of patterns consumes money and resources. Since patterns are reusable assets, opportunities to improve efficiency of the maintenance and use of patterns exist. However, identification and tracking of those opportunities is often difficult. A developer or organization that utilizes patterns will likely want to minimize the cost associated with pattern maintenance. The collection, maintenance, and evaluation of pattern metrics may allow an individual or organization to efficiently manage pattern assets.